package com.caoyanan.algorithm.question.zuoTraining.training004.class01;

import com.caoyanan.algorithm.question.zuoTraining.LogarithmInputGenerator;

import java.util.Arrays;

/**
 * 给定一个数组arr，从左到右表示昨天从早到晚股票的价格
 * 作为一个事后诸葛亮，你想知道如果随便交易，
 * 且每次交易只买卖一股，返回能挣到的最大钱数
 * @author: caoyanan
 * @time: 2021/5/26 22:16
 */
public class Question02_MaxProfit2 {

    public static void main(String[] args) {

        // 做 16 ~ 24  做 3 ~ 49  做 28 ~ 30 价格 [16, 24, 9, 3, 49, 40, 28, 30, 16, 49] 可以得到的最高收益为 56 //最后一个上坡波段忘了加
        int i1 = maxProfit(new int[]{16, 24, 9, 3, 49, 40, 28, 30, 16, 49});
        System.out.println(i1);
        int count = 10000;
        for (int i = 0; i < count; i++) {
            int[] arr = LogarithmInputGenerator.getInstance().generateRandomArray(10, 50);
            int money = maxProfit(arr);
            System.out.printf("价格 %s 可以得到的最高收益为 %s \n", Arrays.toString(arr), money);
        }
    }

    /**
     * 随便交易，把每一个上涨阶段都给做了
     * @param arr
     * @return
     */
    public static int maxProfit(int[] arr) {

        if (arr == null || arr.length < 2) {
            return 0;
        }
        int min=arr[0];
        int pre = arr[0];
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > pre) {
                pre = arr[i];
                continue;
            }
            if (pre != min) {
                sum += pre - min;
                System.out.printf(" 做 %s ~ %s ", min, pre);
                min = pre;
            }
            min = Math.min(min, arr[i]);
            pre = arr[i];
        }
        if (pre != min) {
            sum += pre - min;
            System.out.printf(" 做 %s ~ %s ", min, pre);
        }
        return sum;
    }
}
